/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.data;

import java.sql.SQLException;
import java.util.List;
import java.util.Set;
import occho.model.Asignatura;
import occho.model.Pregunta;
import occho.model.Test;
import occho.model.Usuario;

/**
 *
 * @author Jorge, Migue
 */
public interface TestDAO {
    
    /**
     * Inserta un test en la base de datos
     * @param test 
     * @param asig 
     * @return true si el test se inserta correctamente
     * @throws SQLException  
     */
    public boolean insertarTest(Test test, Asignatura asig) throws SQLException;
    
    /**
     * Borra un test de la base de datos
     * @param test
     * @return true si el test se borra correctamente
     * @throws SQLException  
     */
    public boolean borrarTest(Test test) throws SQLException;
    
    /**
     * Borra las preguntas de un test de la base de datos
     * @param test
     * @return true si se borran todas las preguntas correctamente se borra correctamente
     * @throws SQLException  
     */
    public boolean borrarTestPregunta(Test test) throws SQLException; 
    
    /**
     * Selecciona un test de la base de datos
     * @param idTest
     * @return test
     * @throws SQLException  
     */
    public Test seleccionarTest(int idTest) throws SQLException;
    
    /**
     * Selecciona todos los tests de la base de datos
     * @return lista de tests
     * @throws SQLException  
     */
    public List<Test> seleccionarTests() throws SQLException;
    
    /**
     * Selecciona todos los tests de una asignatura
     * @param asig
     * @return lista de tests de una asignatura
     * @throws SQLException 
     * @throws ClassNotFoundException  
     */
    public List<Test> seleccionarTests(Asignatura asig) throws SQLException, ClassNotFoundException;
    
    /**
     * Selecciona todos los tests de un usuario para una asignatura
     * @param usuario
     * @param asignatura 
     * @return lista de tests de un usuario
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public List<Test> seleccionarTests(Usuario usuario, Asignatura asignatura) throws SQLException, ClassNotFoundException;
    
        /**
     * Inserta en la tabla test_pregunta las preguntas de un test
     * @param test
     * @return true si la operación se realizo con éxito, false en caso contrario
     * @throws SQLException  
     */
    public boolean insertarTestPreguntas(Test test) throws SQLException;
    
    /**
     * Selecciona todos las preguntas de un test, de la tabla test_pregunta
     * @param t 
     * @return lista de las preguntas que tiene un test
     * @throws SQLException 
     * @throws ClassNotFoundException  
     */
    public Set<Pregunta> seleccionarTestPreguntas(Test t) throws SQLException,ClassNotFoundException;
    
    /**
     * Obtiene una lista de preguntas por un usuario
     * @param idTest
     * @param idAlumno
     * @return Set<Pregunta>
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public Set<Pregunta> seleccionarPreguntasRespondidas(int idTest, int idAlumno) throws SQLException, ClassNotFoundException;
    
    
}
